package day07.concurrent04;

/**
 * 动态代理机制 Proxy
 * IOC - Inversion of Control 控制反转
 * AOP - Aspect Oriented Programming 面向切面编程 - 动态代理机制
 */

interface 动物 {
    void eat();
    void say();
}

class 狗 implements 动物{
    public void eat(){
        System.out.println("狗在么么么的吃..");
    }
    public void say(){
        System.out.println("狗在汪汪汪的叫..");
    }
}

class 继承狗 extends 狗{
    @Override
    public void say() {
        System.out.println("狗在喵喵喵喵的叫..");
    }
}

public class Demo08 {
    public static void main(String[] args) {
//        狗 dog = new 狗();
//        dog.eat();
//        dog.say();

        //继承重写改造不喜欢的方法
//        狗 dog = new 继承狗();
//        dog.eat();
//        dog.say();

        //装饰设计模式 - java23种设计模式之一
//        狗 dog = new 狗();
//
//        class 装饰狗 implements 动物{
//            private 动物 ani = null;
//            public 装饰狗(动物 ani) {
//                this.ani = ani;
//            }
//            @Override
//            public void eat() {
//                ani.eat();
//            }
//            @Override
//            public void say() {
//                System.out.println("狗在咩咩咩咩的叫..");
//            }
//            public void run(){
//                System.out.println("狗在跑..");
//            }
//        }
//
//        装饰狗 dogx = new 装饰狗(dog);
//        dogx.eat();
//        dogx.say();
//        dogx.run();
    }
}
